home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac Magazin/MacEasy 1
/
Mac Magazin and MacEasy Magazine CD - Issue 01.iso
/
Sharewarebibliothek
/
Powermac
/
C64
/
SOURCE
/
Menus.c
< prev
next >
Wrap
Text File
|
1994-06-06
|
5KB
|
263 lines
/*
Commodore 64 Emulator v0.4 Earle F. Philhower III
Copyright (C) 1993-4 (st916w9r@dunx1.ocs.drexel.edu)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "Processor.h"
#include "Menus.h"
#include "Error.h"
#include "Resources.h"
Handle menuBar;
MenuHandle appleMenu, fileMenu, editMenu, deviceMenu;
extern int programMode;
int MenuInitialize()
{
menuBar=GetNewMBar(128);
if (menuBar==nil) return kMissingResource;
SetMenuBar(menuBar);
appleMenu=GetMenu(kAppleMenu);
if (appleMenu==nil) return kMissingResource;
AddResMenu(appleMenu, 'DRVR');
fileMenu=GetMenu(kFileMenu);
if (fileMenu==nil) return kMissingResource;
editMenu=GetMenu(kEditMenu);
if (editMenu==nil) return kMissingResource;
deviceMenu=GetMenu(kDeviceMenu);
if (deviceMenu==nil) return kMissingResource;
DisableItem(editMenu, 1);
DrawMenuBar();
return kNoError;
}
void DoMenuChoice(long menuChoice)
{
int theMenu, theItem;
if (menuChoice==0)
{
HiliteMenu(0);
return;
}
theMenu=HiWord(menuChoice);
theItem=LoWord(menuChoice);
HiliteMenu(theMenu);
switch(theMenu)
{
case kAppleMenu:
DoAppleMenu(theItem);
break;
case kFileMenu:
DoFileMenu(theItem);
break;
case kEditMenu:
DoEditMenu(theItem);
break;
case kDeviceMenu:
DoDeviceMenu(theItem);
break;
}
HiliteMenu(0);
}
void DoAppleMenu(int theItem)
{
EventRecord event;
Str255 daName;
DialogPtr dialog;
WindowPtr theWind;
int done;
switch (theItem)
{
case kAbout:
/* Show About... window */
/* Don't draw it since MacOS will give us an update event */
dialog=GetNewDialog(kAboutDialog, nil, (WindowPtr)-1L);
SetWRefCon(dialog, kAboutWindow);
ShowWindow(dialog);
/* Handle events until time to drop window */
done=0;
while (!done)
{
WaitNextEvent(everyEvent, &event, 60L, nil);
switch(event.what)
{
case mouseDown:
case autoKey:
case keyDown:
/* On keypress or buttonpress stop waiting */
done=1;
break;
case updateEvt:
theWind=(WindowPtr)event.message;
BeginUpdate(theWind);
switch (GetWRefCon(theWind))
{
case kVICWindow:
RedrawVIC();
break;
case kDirWindow:
RedrawDir();
break;
case kAboutWindow:
DrawDialog(dialog);
break;
}
EndUpdate(theWind);
break;
}
}
/* Drop window and redraw the VIC screen */
HideWindow(dialog);
DisposDialog(dialog);
TotalRedrawVIC();
break;
default:
/* Run the selected Desk Accessory */
GetItem(appleMenu, theItem, daName);
OpenDeskAcc(daName);
break;
}
}
void DoFileMenu(int theItem)
{
switch(theItem)
{
case kOpenRAM:
LoadRAM();
break;
case kSaveRAM:
SaveRAM();
break;
case kReset:
/* Clear the menu hilite, since we're gonna be away a while */
HiliteMenu(0);
/* Reset PC, memory map */
RegisterInitialize();
/* Go compute */
if (programMode!=kRunning) ProcessorLoop();
break;
case kPageSetup:
break;
case kPrint:
break;
case kPrefs:
DoPrefs();
break;
case kQuit:
CleanUpCommodore();
ExitToShell();
break;
}
}
void DoEditMenu(int theItem)
{
switch(theItem)
{
case kUndo:
break;
case kCut:
break;
case kCopy:
break;
case kPaste:
break;
case kClear:
break;
}
}
void DoDeviceMenu(int theItem)
{
switch(theItem)
{
case kCreateImage:
FloppyCreateImage();
break;
case kSelectImage:
FloppySelectImage();
break;
case kDirectory:
FloppyDirectory();
break;
case kCopyTo:
FloppyCopyTo();
break;
case kChdir:
HardChangeDirectory();
break;
case kNewPFile:
PrinterNewFile();
break;
case kAppendPFile:
PrinterAppendFile();
break;
case kXvert:
PrinterXvertCharacters();
break;
case kDisplayPFile:
PrinterDisplayFile();
break;
case kLoadTape:
LoadTape();
break;
}
}